﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entity;
using System.Data;
using System.Configuration;

namespace DataAccess
{
    /// <summary>
    /// 用户详细信息实体类。
    /// </summary>
    public class UserDetailDAL
    {
        private OleDbHelper helper;

        public UserDetailDAL()
        {
            helper = new OleDbHelper();
            helper.ConnectionString = ConfigurationManager.ConnectionStrings["jianbo"].ConnectionString;
        }

        /// <summary>
        /// 添加用户详细信息。
        /// </summary>
        /// <param name="userdetial">用户</param>
        /// <returns>受影响的行数</returns>
        public int AddUserDetail(UserDetail userdetial)
        {
            //准备SQL语句。
            string sql_text = "INSERT INTO jb_userdetail(detail_id, gender, constellation, description) VALUES(@id, @gen, @conl, @des);";
            //执行并返回受影响的行数。
            return helper.ExecuteNonQuery(sql_text, userdetial.Id, userdetial.Gender, userdetial.Constellation, userdetial.Description);
        }

        /// <summary>
        /// 根据ID获取一个用户详细信息实例。
        /// </summary>
        /// <param name="id">用户ID</param>
        /// <returns>用户实例</returns>
        public UserDetail GetUserDetailById(Guid id)
        {
            // 准备SQL语句。
            string sql_text = "SELECT * FROM jb_userdetail WHERE userdetail_id=@id;";
            // 获取数据表对象实例。
            var dtb = helper.GetDataTable(sql_text);

            // 返回用户信息。
            return dtb.Rows.Count == 0 ?
                null :
                new UserDetail()
                {
                    Id = dtb.Rows[0].Field<Guid>("userdetail_id"),
                    Gender = dtb.Rows[0]["gender"] == DBNull.Value ? true : dtb.Rows[0].Field<bool>("gender"),
                    Constellation = dtb.Rows[0]["constellation"] == DBNull.Value ? (byte)0 : dtb.Rows[0].Field<byte>("constellation"),
                    Description = dtb.Rows[0]["description"] == DBNull.Value ? string.Empty : dtb.Rows[0].Field<string>("description")
                };
        }

        /// <summary>
        /// 更新用户详细信息。
        /// </summary>
        /// <param name="userdetail">用户</param>
        /// <returns>受影响的行数</returns>
        public int UpdateUserDetail(UserDetail userdetail)
        {
            //准备SQL语句。
            string sql_text = "UPDATE jb_userdetail SET gender=@gen,constellation=@conl,description=@des where userdetail_id=@id;";
            //执行并返回受影响的行数。
            return helper.ExecuteNonQuery(sql_text, userdetail.Gender, userdetail.Constellation, userdetail.Description, userdetail.Id);
        }
    }
}
